package com.mlh.springboot.controller;

import com.mlh.springboot.bean.Monster3;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import java.util.List;
import java.util.Map;

@RestController
public class ParameterController {
	/**
	 * /monster/{id}/{name} 解读
	 * 1. /monster/{id}/{name} 构成完整请求路径
	 * 2. {id} {name} 就是占位变量
	 * 3. @PathVariable("name"): 这里 name 和{name} 命名保持一致
	 * 4. String name_ 这里自定义，老师故意这样写下
	 * 5. @PathVariable Map<String, String> map 把所有传递的值传入 map
	 * 6. 可以看下@PathVariable 源码
	 */
	@GetMapping("/monster/{id}/{name}")
	public String pathVariable(@PathVariable("id") Integer id,
	                           @PathVariable("name") String name_,
	                           @PathVariable Map<String, String> map) {
		System.out.println("id= " + id + " name= " + name_);
		System.out.println(map);
		return "success";
	}

	@GetMapping("/requestHeader")
	// @RequestHeader( "Host")获取http请求头的host信息
	// @RequestHeader Map<String,String> header:获取到http 请求的所有信息
	public String requestHeader(
			@RequestHeader("Host") String host,
			@RequestHeader Map<String, String> header) {
		System.out.println("host= " + host);
		System.out.println(header);
		return "success";
	}

	@GetMapping("/requestParam")
	//如果 fruit 是多个值, 可以使用 List 来接收
	public String requestParam(@RequestParam("name") String name,
							   @RequestParam("fruit")List<String>fruit,
							   //获取到所有参数，但是fruit只能获取到第一个，因为他们的key相同
							   @RequestParam Map<String, String> paras){
		System.out.println(name);
		System.out.println(fruit);
		System.out.println(paras);
		return "success";
	}

	/**
	 * 说明 1. value = "cookie_key" 表示接收名字为 cookie_key 的 cookie
	 * 2. 如果浏览器携带来对应的 cookie , 那么后面的参数类型是 String ,则接收到的是对应对 value
	 * 3. 后面的参数类型是 Cookie ,则接收到的是封装好的对应的 cookie
	 * 根据参数类型的不同选择传输值还是整个cookie对象
	 */
	@GetMapping("/cookie")
	public String cookie(
			@CookieValue(value = "cookie_key", required = false) String cookie_value,
			@CookieValue(value = "username", required = false) Cookie cookie) {
		System.out.println("cookie_value="+cookie_value);
		System.out.println("username=" + cookie.getName() + "--" + cookie.getValue());
		return "success";
	}

	@PostMapping("/save")
	// @RequestBody 是整体取出 Post 请求内容
	public String postMethod(@RequestBody String content){
		System.out.println("content= " + content);
		return "success";
	}

	@PostMapping("/savemonster")
	//不需要任何注解，自动封装进去
	//前提是 传入的参数名要和对象的属性名相同
	public String saveMonster(Monster3 monster){
		System.out.println("monster= " + monster);
		return "success";
	}
}
